package main

import (
	"fmt"
	"sort"
)

// sort by function
// sort string by length rather than the alphabetically
type byLength []string

// implement sort.Interface- Len, Less, Swap,这样我们自己的bylength type就可以使用
// sort功能
// Len和Swap的不同类型实现都很相似，Less函数是具体交换的逻辑
func (s byLength) Len() int {
	return len(s)
}

func (s byLength) Swap(i, j int) {
	s[i], s[j] = s[j], s[i]
}

func (s byLength) Less(i, j int) bool {
	return len(s[i]) < len(s[j])
}

func main() {
	// 普通sort
	// strs := []string{"C", "b", "a"}
	// sort.Strings(strs)
	// fmt.Println("strs:", strs)
	// ints := []int{9, 201, 23, 2313, 4, 2, 0}
	// sort.Ints(ints)
	// fmt.Println("Ints:", ints)

	// s := sort.IntsAreSorted(ints)
	// fmt.Println(s)

	//------------------------------
	// sort by function
	fruits := []string{"peach", "banana", "kiwi"}
	sort.Sort(byLength(fruits))
	fmt.Println(fruits)
}
